Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

566
Visualizações
Obtener "AuthToken.user" debe ser una instancia de "Usuario". en django-resto-knox

Estoy creando un método de inicio de sesión usando Django-rest-Knox. Creé un usuario personalizado en la aplicación usando AbstractBaseUser .

Esta es mi vista.py

 class LoginView(GenericAPIView): serializer_class = LoginSerializer def post(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) # Load request body to serializer serializer.is_valid(raise_exception=True) # Validate data in serializer and raise an error if one is found user = serializer.validated_data # Get the validated data from the serializer token = AuthToken.objects.create(user)[1] # Create an Authentication Token for the user return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, # Get serialized User data "token": token })

Serializador.py

 class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() # class Meta: # model = User # fields = ('username', 'password') def Validate(self, data): user = authenticate(**data) if user: return user raise serializers.ValidationError("Incorrect Credentials")

Este es mi modelo de usuario personalizado

 class User(AbstractBaseUser): _id = models.AutoField email = models.EmailField(verbose_name='email', max_length=255, unique=True) username = models.CharField(verbose_name='username', max_length = 100, unique=True) name = models.CharField(max_length = 100) date_joined = models.DateTimeField(verbose_name="date-joined", auto_now_add=True) last_login = models.DateTimeField(verbose_name="last-login", auto_now=True) category = models.CharField(max_length=50, default= "teacher") is_admin = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) is_active = models.BooleanField(default=True) is_teacher = models.BooleanField(default=False) is_parent = models.BooleanField(default=False) USERNAME_FIELD = 'username' REQUIRED_FIELDS = ['email',] objects = UserManager() def __str__(self): # return self.email return self.username def has_perm(self, perm, obj=None): return self.is_admin def has_module_perms(self, app_label): return True

Recibo un error de valor al enviar el inicio de sesión como Cannot assign "OrderedDict([('username', 'api_test'), ('password', 'test@123')])": "AuthToken.user" must be a "User" instance.

Creo que en algún lugar Django/Knox no puede obtener user y user.is_active en mi LoginSerializer . He iniciado mi modelo de usuario desde las migraciones iniciales.

Cualquier ayuda para resolver este problema sería genial. Gracias.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

En esta parte de tu código:

 return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, # Get serialized User data "token": token })

Debe reemplazar el token por una instancia del usuario al que pertenece este token, por ejemplo:

 return Response({ "user": UserSerializer(user, context=self.get_serializer_context()).data, # Get serialized User data "token": User.objects.get(token=token) })
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda